﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Libreria.SICOM.Negocio;
using Libreria.SICOM.Modelo;
using System.Configuration;
using Web.SICOM.Models;


namespace Web.SICOM.Controllers
{
    public class EquipodeMedicionController : Controller
    {
        //
        // GET: /EquipodeMedicion/

        public ActionResult Index()
        {
            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            EquipodeMedicionNegocio equipobo = new EquipodeMedicionNegocio();
            ViewData.Model = equipobo.consultarEquiposdeMedicion(ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString);
            if (((List<EquipodeMedicion>)ViewData.Model).Count == 0)
            {
                ViewData.Model = "No Hay Datos Asociados";

            }
            return View();
        }

        public ActionResult Crear()
        {
            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            string cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            EquipodeMedicionModelo modelo= new EquipodeMedicionModelo();
            List<TipodeMuestra> tiposdemuestratemp = new TipodeMuestraNegocio().consultarTiposdeMuestra(cdc);
            List<SelectListItem> tiposdemuestra = new List<SelectListItem>();

            foreach (TipodeMuestra tipodemuestra in tiposdemuestratemp)
            {
                tiposdemuestra.Add(new SelectListItem() { Selected = false, Text = tipodemuestra.Nombre, Value = tipodemuestra.Identificador.ToString() });

            }
            modelo.Tiposdemuestra = tiposdemuestra;
            ViewData.Model = modelo;
            if (((EquipodeMedicionModelo)ViewData.Model).Tiposdemuestra.Count == 0)
            {
                ViewData.Model = "No Hay Datos de Tipos de muestra Asociados";
            }

            return View();
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Insertar(EquipodeMedicion equipo, string[] TiposdeMuestra)
        {
          String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            List<EquipodeMedicion> equipos = new EquipodeMedicionNegocio().consultarEquiposdeMedicion(cdc);
            for (int i = 0; i <= equipos.Count - 1; i++)
            {
                if (equipos[i].Identificador == equipo.Identificador)
                {
                    ModelState.AddModelError("Identificador", "***El Codigo especificado ya se encuentra en uso***");
                }
                if (equipos[i].Nombre == equipo.Nombre)
                {
                    ModelState.AddModelError("Nombre", "***El Nombre especificado ya se encuentra en uso***");
                }

            }
            if (equipo.Automatico == false && equipo.Manual == false)
            {
                ModelState.AddModelError("Prueba", "***Se Debe Especificar Campo Automatico o Manual***");
            }
            if (TiposdeMuestra == null || TiposdeMuestra.Contains(""))
            {
                ModelState.AddModelError("Equipo", "***Especificacion de tipo(s) de muestra obligatoria***");
            }
            if (!ModelState.IsValid)
            {
                EquipodeMedicionModelo modelo = new EquipodeMedicionModelo();
                List<TipodeMuestra> tiposdemuestratemp = new TipodeMuestraNegocio().consultarTiposdeMuestra(cdc);
                List<SelectListItem> tiposdemuestra = new List<SelectListItem>();
                foreach (TipodeMuestra tipodemuestra in tiposdemuestratemp)
                {
                    tiposdemuestra.Add(new SelectListItem() { Selected = false, Text = tipodemuestra.Nombre, Value = tipodemuestra.Identificador.ToString() });

                }
                modelo.Tiposdemuestra = tiposdemuestra;
                ViewData.Model = modelo ;
                return View("Crear",ViewData.Model);
            }
       
           Int32? id = equipo.Identificador;
            String name = equipo.Nombre;
            Boolean? auto = equipo.Automatico;
            Boolean? manu = equipo.Manual;
            String respon = equipo.Responsable;
            new EquipodeMedicionNegocio().crearEquipodeMedicion(id, name, auto, manu, respon, cdc);
            for (int i = 0; i < TiposdeMuestra.Length; i++)
            {
                new EquipodeMedicionNegocio().CrearEquipodeMedicionPorTipoMuestra(id, Convert.ToInt32(TiposdeMuestra[i]), cdc);
            }
            return RedirectToAction("Index");
        }

        public ActionResult Editar(Int32? id)
        {
            string cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            
            EquipodeMedicionModelo modelo= new EquipodeMedicionModelo();
            modelo.EquipodeMedicion = new EquipodeMedicionNegocio().consultarPorIdentificador(id, cdc);
            //llenada de modelo de tipos de muestras por equipo
            List<TipodeMuestra> tiposdemuestratemp = new EquipodeMedicionNegocio().ConsultarTiposdeMuestraPorEuipodeMedicion(id, cdc);
            List<SelectListItem> tiposdemuestra = new List<SelectListItem>();

            foreach (TipodeMuestra tipodemuestra in tiposdemuestratemp)
            {
                tiposdemuestra.Add(new SelectListItem() { Selected = false, Text = tipodemuestra.Nombre, Value = tipodemuestra.Identificador.ToString() });

            }
            modelo.Tiposdemuestra = tiposdemuestra;
           //llenada de modelo de tipos de muestras por equipogenerales
            List<TipodeMuestra> tiposdemuestragloales = new TipodeMuestraNegocio().consultarTiposdeMuestra(cdc); ;
            List<SelectListItem> tiposdemuestragenerales = new List<SelectListItem>();

            foreach (TipodeMuestra tipodemuestrageneral in tiposdemuestragloales)
            {
                tiposdemuestragenerales.Add(new SelectListItem() { Selected = false, Text = tipodemuestrageneral.Nombre, Value = tipodemuestrageneral.Identificador.ToString() });

            }
            modelo.Tiposdemuestra = tiposdemuestra;
            modelo.Tiposdemuestraglobal = tiposdemuestragenerales;

            ViewData.Model = modelo;
            return View();
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Actualizar(EquipodeMedicion equipo, string[] TiposdeMuestra)
        {
           String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            Int32? id = equipo.Identificador;
            String name = equipo.Nombre;
            Boolean? auto = equipo.Automatico;
            Boolean? manu = equipo.Manual;
            String respon = equipo.Responsable;
            int count = 0;
            List<EquipodeMedicion> equipos = new EquipodeMedicionNegocio().consultarEquiposdeMedicion(cdc);
            if (equipo.Automatico == false && equipo.Manual == false)
            {
                ModelState.AddModelError("Prueba", "***Se Debe Especificar Campo Automatico o Manual***");
            }
            if (TiposdeMuestra == null || TiposdeMuestra.Contains(""))
            {
                ModelState.AddModelError("Equipo", "***Especificacion de tipo(s) de muestra obligatoria***");
            }
            else
            {
                string tipotemporal = TiposdeMuestra[count];
                for (int i = 1; i < TiposdeMuestra.Length; i++)
                {
                    if (TiposdeMuestra[i] == tipotemporal)
                    {
                        ModelState.AddModelError("Equipo", "*** Tipo de muestra repetido ***");
                    }
                }    
            }
            
            
            if (!ModelState.IsValid)
            {
                EquipodeMedicionModelo modelo= new EquipodeMedicionModelo();
                modelo.EquipodeMedicion = equipo;
                //llenado de  tipos de muestra por  equipo
                List<TipodeMuestra> tiposdemuestratemp = new EquipodeMedicionNegocio().ConsultarTiposdeMuestraPorEuipodeMedicion(id, cdc);
                List<SelectListItem> tiposdemuestra = new List<SelectListItem>();
                foreach (TipodeMuestra tipodemuestra in tiposdemuestratemp)
                {
                    tiposdemuestra.Add(new SelectListItem() { Selected = false, Text = tipodemuestra.Nombre, Value = tipodemuestra.Identificador.ToString() });

                }
                //llenado de  tipos de muestra generales
                List<TipodeMuestra> tiposdemuestraglobales = new TipodeMuestraNegocio().consultarTiposdeMuestra(cdc);
                List<SelectListItem> tiposdemuestragenerales = new List<SelectListItem>();
                foreach (TipodeMuestra tipodemuestrageneral in tiposdemuestraglobales)
                {
                    tiposdemuestragenerales.Add(new SelectListItem() { Selected = false, Text = tipodemuestrageneral.Nombre, Value = tipodemuestrageneral.Identificador.ToString() });

                }
                modelo.Tiposdemuestra = tiposdemuestra;
                modelo.Tiposdemuestraglobal = tiposdemuestragenerales;
                ViewData.Model = modelo;
                return View("Editar", ViewData.Model);
            }
            //List<TipodeMuestra> tiposmuestraporequipo = new EquipodeMedicionNegocio().ConsultarTiposdeMuestraPorEuipodeMedicion(id, cdc);
           
             new EquipodeMedicionNegocio().eliminarTiposdeMuestraPorEquipo(id,cdc);
             for (int i = 0; i < TiposdeMuestra.Length; i++)
             {
                 new EquipodeMedicionNegocio().CrearEquipodeMedicionPorTipoMuestra(id, Convert.ToInt32(TiposdeMuestra[i]), cdc);
             }
           
            new EquipodeMedicionNegocio().actualizarEquipodeMedicion(id, name, auto, manu, respon, cdc);
            return RedirectToAction("Index");
        }

        public ActionResult Eliminar(EquipodeMedicion nuevoequipo)
        {

            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            Int32? id = nuevoequipo.Identificador;
            List<Muestra> listademuestras = new List<Muestra>();
            List<DetalledeEquipo> listadedetallesequipo = new List<DetalledeEquipo>();
            
            Muestra muestra = new Muestra(cdc);
            DetalledeEquipo detalleequipo= new DetalledeEquipo(cdc);

            detalleequipo.Identificador = id;
            detalleequipo.Fechadeinstalacion = DateTime.MinValue;
            detalleequipo.Mac = null;

            muestra.Identificador = null;
            muestra.Idtipodemuestra = null;
            muestra.Iddeproyecto = null;
            muestra.Iddelugar = null;
            muestra.Fechadecaptura = DateTime.MinValue;
            muestra.Codigoderesponsable = null;
            muestra.Mac = null;
            muestra.Iddeequipo = id;
            muestra.Iddevariable = null;
            muestra.Valor = null;

            listadedetallesequipo = detalleequipo.consultar();
            listademuestras = muestra.consultar();

            if (listademuestras.Count == 0 && listadedetallesequipo.Count==0)
            {
                new EquipodeMedicionNegocio().eliminarTiposdeMuestraPorEquipo(id, cdc);
                new EquipodeMedicionNegocio().eliminarEquipodeMedicion(id, "null", true, false, "juan",cdc);
                return RedirectToAction("Index");
            }

            ModelState.AddModelError("Identificador", " No se puede eliminar el Equipo especificado, se encuentra en uso.");
            ViewData.Model = new EquipodeMedicionNegocio().consultarEquiposdeMedicion(cdc);
            return View("Index",ViewData.Model);
        }

    }
}
